﻿using System;
using System.IO;

namespace Homework19
{
    internal class Program
    {
        /// <summary>
        /// 列出D盘下有多少.txt文件，其中，不可访问的目录跳过不执行
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            // 定义D盘的路径
            string drivePath = @"D:\";

            // 定义一个计数器来记录.txt文件的数量
            int txtFileCount = 0;

            try
            {
                // 使用DirectoryInfo类获取D盘的目录信息
                DirectoryInfo dirInfo = new DirectoryInfo(drivePath);

                // 使用FileInfo类获取所有文件信息
                FileInfo[] files = dirInfo.GetFiles();

                // 遍历所有文件
                foreach (FileInfo file in files)
                {
                    // 检查文件扩展名是否为.txt
                    if (file.Extension.ToLower() == ".txt")
                    {
                        txtFileCount++;
                    }
                }

                // 递归遍历子目录
                foreach (DirectoryInfo subDir in dirInfo.GetDirectories())
                {
                    try
                    {
                        // 尝试获取子目录中的.txt文件
                        txtFileCount += CountTxtFiles(subDir);
                    }
                    catch (UnauthorizedAccessException)
                    {
                        // 如果无法访问子目录，则跳过
                        Console.WriteLine($"无法访问目录：{subDir.FullName}");
                    }
                    catch (Exception ex)
                    {
                        // 处理其他可能的异常
                        Console.WriteLine($"处理目录 {subDir.FullName} 时发生错误：{ex.Message}");
                    }
                }
            }
            catch (Exception ex)
            {
                // 处理可能的异常，例如D盘不存在
                Console.WriteLine($"发生错误：{ex.Message}");
            }

            // 输出.txt文件的总数
            Console.WriteLine($"D盘中.txt文件的总数是：{txtFileCount}");
        }

        // 递归函数，用于计算指定目录及其子目录中的.txt文件数量
        private static int CountTxtFiles(DirectoryInfo dirInfo)
        {
            int count = 0;

            // 获取所有.txt文件
            FileInfo[] files = dirInfo.GetFiles("*.txt", SearchOption.AllDirectories);

            // 计算.txt文件的数量
            count += files.Length;

            return count;
        }
    }
}
